home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
SGI Developer Toolbox 6.1
/
SGI Developer Toolbox 6.1 - Disc 4.iso
/
public
/
plan
/
src
/
keymenu.c
< prev
next >
Wrap
C/C++ Source or Header
|
1994-08-01
|
9KB
|
284 lines
/*
* Create and destroy the keyword search popup. It is installed when the
* Keyword Search entry in the Seach pulldown in the main calendar window
* is used.
*
* destroy_keyword_popup()
* create_keyword_popup()
*/
#include <stdio.h>
#include <time.h>
#include <Xm/Xm.h>
#include <Xm/DialogS.h>
#include <Xm/Form.h>
#include <Xm/RowColumn.h>
#include <Xm/LabelP.h>
#include <Xm/LabelG.h>
#include <Xm/PushBP.h>
#include <Xm/PushBG.h>
#include <Xm/ToggleB.h>
#include <Xm/Text.h>
#include <Xm/Protocols.h>
#include "cal.h"
extern void help_callback();
static void mode_callback(), text_callback(),
search_callback(), done_callback();
extern Display *display; /* everybody uses the same server */
extern struct config config; /* global configuration data */
extern struct list *mainlist; /* list of all schedule entries */
extern Pixel color[NCOLS]; /* colors: COL_* */
static BOOL have_shell; /* message popup exists if TRUE */
static Widget shell; /* popup menu shell */
static Widget text; /* search string */
static char *search_string; /* string to search for */
int search_mode=1; /* 0=case sensitive, 1=ins., 2=regex */
/*
* destroy a popup. Remove it from the screen, and destroy its widgets.
* It's too much trouble to keep them for next time.
*/
destroy_keyword_popup()
{
if (have_shell) {
if (search_string)
XtFree(search_string);
search_string = XmTextGetString(text);
XtPopdown(shell);
have_shell = FALSE;
}
}
/*
* create a keyword popup as a separate application shell. When the popup
* already exists and was just popped down, pop it up and exit. This ensures
* that it comes up with the same defaults.
*/
create_keyword_popup()
{
Widget form, radio, w;
Arg args[20];
int n;
Atom closewindow;
if (have_shell) {
XtPopup(shell, XtGrabNone);
return;
}
n = 0;
XtSetArg(args[n], XmNdeleteResponse, XmDO_NOTHING); n++;
XtSetArg(args[n], XmNiconic, False); n++;
shell = XtAppCreateShell("Keyword Search", "plan",
applicationShellWidgetClass, display, args, n);
# ifdef EDITRES
XtAddEventHandler(shell, (EventMask)0, TRUE,
_XEditResCheckMessages, NULL);
# endif
set_icon(shell, 1);
form = XtCreateManagedWidget("keyform", xmFormWidgetClass,
shell, NULL, 0);
XtAddCallback(form, XmNhelpCallback, help_callback, (XtPointer)"key");
/*-- mode --*/
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopOffset, 16); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 16); n++;
w = XtCreateManagedWidget("Search mode:", xmLabelWidgetClass,
form, args, n);
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNtopOffset, 16); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNleftWidget, w); n++;
XtSetArg(args[n], XmNleftOffset, 16); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtSetArg(args[n], XmNspacing, 4); n++;
radio = XmCreateRadioBox(form, "radio", args, n);
n = 0;
XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtSetArg(args[n], XmNset, False); n++;
w = XtCreateManagedWidget("Literal case sensitive",
xmToggleButtonWidgetClass,
radio, args, n);
XtAddCallback(w, XmNvalueChangedCallback, mode_callback, (XtPointer)0);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"key_literal");
n = 0;
XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtSetArg(args[n], XmNset, True); n++;
w = XtCreateManagedWidget("Literal case insensitive",
xmToggleButtonWidgetClass,
radio, args, n);
XtAddCallback(w, XmNvalueChangedCallback, mode_callback, (XtPointer)1);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"key_uncase");
#ifndef NOREGEX
n = 0;
XtSetArg(args[n], XmNselectColor, color[COL_TOGGLE]); n++;
XtSetArg(args[n], XmNindicatorType, XmONE_OF_MANY); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtSetArg(args[n], XmNset, False); n++;
w = XtCreateManagedWidget("Regular expression",
xmToggleButtonWidgetClass,
radio, args, n);
XtAddCallback(w, XmNvalueChangedCallback, mode_callback, (XtPointer)2);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"key_regular");
#endif
XtManageChild(radio);
/*-- search string --*/
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, radio); n++;
XtSetArg(args[n], XmNtopOffset, 16); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 16); n++;
w = XtCreateManagedWidget("Search for:", xmLabelWidgetClass,
form, args, n);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"key_string");
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, w); n++;
XtSetArg(args[n], XmNtopOffset, 5); n++;
XtSetArg(args[n], XmNleftAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNleftOffset, 16); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightOffset, 16); n++;
XtSetArg(args[n], XmNrecomputeSize, False); n++;
XtSetArg(args[n], XmNpendingDelete, True); n++;
XtSetArg(args[n], XmNhighlightThickness,0); n++;
XtSetArg(args[n], XmNbackground, color[COL_TEXTBACK]); n++;
text = XtCreateManagedWidget("", xmTextWidgetClass,
form, args, n);
XtAddCallback(text, XmNactivateCallback, text_callback,
(XtPointer)NULL);
XtAddCallback(text, XmNhelpCallback, help_callback,
(XtPointer)"key_string");
/*-- buttons --*/
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, text); n++;
XtSetArg(args[n], XmNtopOffset, 16); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNrightOffset, 16); n++;
XtSetArg(args[n], XmNwidth, 80); n++;
w = XtCreateManagedWidget("Search", xmPushButtonWidgetClass,
form, args, n);
XtAddCallback(w, XmNactivateCallback, search_callback, (XtPointer)0);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"key_search");
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, text); n++;
XtSetArg(args[n], XmNtopOffset, 16); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNrightWidget, w); n++;
XtSetArg(args[n], XmNrightOffset, 8); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomOffset, 16); n++;
XtSetArg(args[n], XmNwidth, 80); n++;
w = XtCreateManagedWidget("Cancel", xmPushButtonWidgetClass,
form, args, n);
XtAddCallback(w, XmNactivateCallback, done_callback, (XtPointer)0);
XtAddCallback(w, XmNhelpCallback, help_callback,
(XtPointer)"key_cancel");
n = 0;
XtSetArg(args[n], XmNtopAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNtopWidget, text); n++;
XtSetArg(args[n], XmNtopOffset, 16); n++;
XtSetArg(args[n], XmNrightAttachment, XmATTACH_WIDGET); n++;
XtSetArg(args[n], XmNrightWidget, w); n++;
XtSetArg(args[n], XmNrightOffset, 8); n++;
XtSetArg(args[n], XmNbottomAttachment, XmATTACH_FORM); n++;
XtSetArg(args[n], XmNbottomOffset, 16); n++;
XtSetArg(args[n], XmNwidth, 80); n++;
w = XtCreateManagedWidget("Help", xmPushButtonWidgetClass,
form, args, n);
XtAddCallback(w, XmNactivateCallback, help_callback, (XtPointer)"key");
XtAddCallback(w, XmNhelpCallback, help_callback, (XtPointer)"key");
XtPopup(shell, XtGrabNone);
closewindow = XmInternAtom(display, "WM_DELETE_WINDOW", False);
XmAddWMProtocolCallback(shell, closewindow,
done_callback, (XtPointer)shell);
have_shell = TRUE;
}
/*-------------------------------------------------- callbacks --------------*/
/*
* All of these routines are direct X callbacks.
*/
/*ARGSUSED*/
static void mode_callback(widget, item, data)
Widget widget;
int item;
XmToggleButtonCallbackStruct *data;
{
search_mode = item;
}
/*ARGSUSED*/
static void done_callback(widget, item, data)
Widget widget;
int item;
XmToggleButtonCallbackStruct *data;
{
destroy_keyword_popup();
}
/*ARGSUSED*/
static void search_callback(widget, item, data)
Widget widget;
int item;
XmToggleButtonCallbackStruct *data;
{
if (search_string)
XtFree(search_string);
search_string = XmTextGetString(text);
if (*search_string)
create_list_popup(mainlist, (time_t)0, (time_t)0,
search_string, (struct entry *)0);
}
/*ARGSUSED*/
static void text_callback(widget, item, data)
Widget widget;
int item;
XmToggleButtonCallbackStruct *data;
{
if (search_string)
XtFree(search_string);
search_string = XmTextGetString(widget);
if (*search_string)
create_list_popup(mainlist, (time_t)0, (time_t)0,
search_string, (struct entry *)0);
}